/*
 * @Description: 打包数据到version版本,进行版本号的提升
 * @Author: 周鹏飞
 * @Date: 2019-09-29 15:04:11
 * @LastEditTime: 2021-03-09 15:33:53
 * @LastEditors: 绪力
 */
module.exports = function(grunt) {
  //获取最新的版本号
  grunt.registerTask("getversion", "-", function() {
    let done = this.async()
    let congurl = "../package.json"
    let package = grunt.file.readJSON(congurl)
    const vss = package.version
    console.log("当前版本号 : " + vss)
    //进行版本号升级
    const a = vss.split(".")
    a[2] = parseInt(a[2]) + 1
    package.version = a.join(".")
    console.log("升级后版本号", package.version)
    let savepackage = formatJson(JSON.stringify(package), false)
    grunt.file.write(congurl, savepackage)
    done()
  })
  grunt.registerTask("default", ["getversion"])
}

// 工具方法
function formatJson(txt, compress /*是否为压缩模式*/) {
  /* 格式化JSON源码(对象转换为JSON文本) */
  var indentChar = " "
  if (/^\s*$/.test(txt)) {
    alert("数据为空,无法格式化! ")
    return
  }
  try {
    var data = eval("(" + txt + ")")
  } catch (e) {
    alert("数据源语法错误,格式化失败! 错误信息: " + e.description, "err")
    return
  }
  var draw = [],
    last = false,
    This = this,
    line = compress ? "" : "\n",
    nodeCount = 0,
    maxDepth = 0

  var notify = function(name, value, isLast, indent /*缩进*/, formObj) {
    nodeCount++ /*节点计数*/
    for (var i = 0, tab = ""; i < indent; i++) tab += indentChar /* 缩进HTML */
    tab = compress ? "" : tab /*压缩模式忽略缩进*/
    maxDepth = ++indent /*缩进递增并记录*/
    if (value && value.constructor == Array) {
      /*处理数组*/
      draw.push(tab + (formObj ? '"' + name + '":' : "") + "[" + line) /*缩进'[' 然后换行*/
      for (var i = 0; i < value.length; i++) notify(i, value[i], i == value.length - 1, indent, false)
      draw.push(tab + "]" + (isLast ? line : "," + line)) /*缩进']'换行,若非尾元素则添加逗号*/
    } else if (value && typeof value == "object") {
      /*处理对象*/
      draw.push(tab + (formObj ? '"' + name + '":' : "") + "{" + line) /*缩进'{' 然后换行*/
      var len = 0,
        i = 0
      for (var key in value) len++
      for (var key in value) notify(key, value[key], ++i == len, indent, true)
      draw.push(tab + "}" + (isLast ? line : "," + line)) /*缩进'}'换行,若非尾元素则添加逗号*/
    } else {
      if (typeof value == "string") value = '"' + value + '"'
      draw.push(tab + (formObj ? '"' + name + '":' : "") + value + (isLast ? "" : ",") + line)
    }
  }
  var isLast = true,
    indent = 0
  notify("", data, isLast, indent, false)
  return draw.join("")
}
